#ifndef __LAMBDA__H_
#define __LAMBDA__H_


/*
*   Removes lambda transitions in matrix
*/
void removeLambdaTrans(t_table * t);

/*
*   Checks whether state's lambda closure contains any of the originally
*   declared final states, in which case adds state to the final states
*/
void checkFinalInClosure(t_table * t, t_longInt closure, int state);

/*
*   Revisits each state in state's vector to check whether it should also be
*   in final sates vector, due to the possible addition of a new final state
*   during the execution of 'checkFinalInClosure'
*/
void recheckFinalStates(t_table * t);

/*
*   Returns in 'closure' the lambda closure of 'state'
*/
void setLambdaClosure(int state, t_table * t, t_longInt closure, t_longInt checked);

/*
*   Checks if 'state' has already been marked as seen in 'l'. This way, infinite
*   loops are avoided during lambda closure calculation
*/
int alreadySeen(int state, int originalDim, t_longInt l);


#endif
